/*
@data: 2023/7/23
@author: North
@desc: test
*/
package main

import (
	"fmt"
	"sort"
	"strings"
)

//func main() {
//	var a uint32 = 1
//	var b uint32 = 2
//
//	result := a - b
//	fmt.Println("Result:", result)
//}
func main() {
	nums := []int{3,30,34,5,9}
	result := largestNumber(nums)
	fmt.Println(result)
}

func largestNumber(nums []int) string {
	//建立一个字符切片，长度为nums的长度
	strs := make([]string, len(nums))
	for i,v := range nums{
		//转为字符串存入
		strs[i] = fmt.Sprintf("%d", v)
	}
	//使用sort包中的sort. slice()函数对strs切片进行排序
	//根据sort.Slice()的第二个参数传递的自定义比较函数（匿名函数）来排序
	sort.Slice(strs, func(i, j int) bool{
		if strs[i][0] > strs[j][0] {
			return true
		}else{
			return strs[i] + strs[j] > strs[j] + strs[i]
		}
	})

	// 特殊情况：  全是0, 例如： {0,0,0}
	if strs[0] == "0" {
		return "0"
	}
	//使用strings.Join()函数将字符串切片(或字符串数组)的元素连接成单个字符串
	return strings.Join(strs, "")
}

